package com.yidiandao.business.data.model;

import com.yidiandao.business.data.bean.Goods;
import com.yidiandao.business.utils.UIUtils;

/** 限时购活动对象计时器 */
class FlashTimerTask implements Runnable {

    private Goods flashGoods1;
    private Goods flashGoods2;
    private Goods flashGoods3;

    private boolean stopTimer1;
    private boolean stopTimer2;
    private boolean stopTimer3;

    private long serverNowTime;

    FlashTimerTask(Goods flashGoods1, Goods flashGoods2, Goods flashGoods3, long nowTime) {
        this.flashGoods1 = flashGoods1;
        this.flashGoods2 = flashGoods2;
        this.flashGoods3 = flashGoods3;

        serverNowTime = nowTime;

        // 初始化状态
        refreshFlashGoodsState(this.flashGoods1);
        refreshFlashGoodsState(this.flashGoods2);
        refreshFlashGoodsState(this.flashGoods3);
    }

    private void refreshFlashGoodsState(Goods flashGoods) {

        if (flashGoods == null) {
            return;
        }

        // 活动开始时间
        long startTime = flashGoods.getStartTime();

        // 活动结束时间
        long endTime = flashGoods.getEndTime();

        if (serverNowTime < startTime) {
            // 服务器当前的时间小于开始时间
            // 说明活动未开始 ---> 未开始的状态
            flashGoods.setState(Goods.ACTIVE_STATE.UN_START);
            // 初始化距离活动开始的时间
            flashGoods.setToStartTime(startTime - serverNowTime);

        } else if (serverNowTime > endTime) {
            // 服务器当前的时间大于结束时间
            // 说明活动已经结束  ---> 已经结束的状态
            flashGoods.setState(Goods.ACTIVE_STATE.FINISHED);
        } else {
            // 服务器的当前时间大于等于活动的开始时间，小于等于活动的结束时间
            // 说明活动正在运行中 --> 正在运行中的状态
            flashGoods.setState(Goods.ACTIVE_STATE.RUNNING);
            // 设置距离活动结束还剩多少时间
            flashGoods.setToEndTime(endTime - serverNowTime);
        }
    }

    @Override
    public void run() {

        // 每执行 1秒 ，服务器的当前时间 增加 1秒
        serverNowTime++;

        // 对象不为null，且活动正在运行中才开始定时改变对象的值
        // 第1个限时购对象
        if (flashGoods1 != null && flashGoods1.getState() != Goods.ACTIVE_STATE.FINISHED) {
            stopTimer1 = false;
            // 活动未结束前，都需要动态计算当前商品的状态
            refreshFlashGoodsState(flashGoods1);
        } else {
            stopTimer1 = true;
        }

        // 第2个限时购对象
        if (flashGoods2 != null && flashGoods2.getState() != Goods.ACTIVE_STATE.FINISHED) {
            stopTimer2 = false;
            // 活动未结束前，都需要动态计算当前商品的状态
            refreshFlashGoodsState(flashGoods2);
        } else {
            stopTimer2 = true;
        }

        // 第3个限时购对象
        if (flashGoods3 != null && flashGoods3.getState() != Goods.ACTIVE_STATE.FINISHED) {
            stopTimer3 = false;
            // 活动未结束前，都需要动态计算当前商品的状态
            refreshFlashGoodsState(flashGoods3);
        } else {
            stopTimer3 = true;
        }

        if (stopTimer1 && stopTimer2 && stopTimer3) {
            // 定时任务结束
            stopTimer();
            return;
        }

        // 每隔1秒重新计算
        UIUtils.postDelayed(this, 1000);
    }

    /** 停止倒计时 */
    void stopTimer() {
        UIUtils.removeCallbacks(this);
    }

    /** 开始倒计时 */
    void startTimer() {
        stopTimer();
        UIUtils.postDelayed(this, 1000);
    }
}
